#ifndef TwoProgressTableWidget_H
#define TwoProgressTableWidget_H

#include <QTableWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QColorDialog>
#include <QRandomGenerator>
#include <QMap>
#include <QVariant>
#include <QMenu>
#include <QFileDialog>
#include <QMessageBox>
#include "customprogresswidget.h"
#include "devicechannel.h"

class TwoProgressTableWidget : public QTableWidget {
    Q_OBJECT
public:
    explicit TwoProgressTableWidget(QWidget *parent = nullptr);

    // 动态添加列
    void addColumn(const QString& columnName, const QString& columnType, const QVariant& defaultValue = QVariant());

    // 动态设置列属性
    void setColumnProperty(int column, const QString& propertyName, const QVariant& value);

    // 添加行
    void addRow(const QMap<QString, QVariant>& rowData);
    void addRows(const QList<QMap<QString, QVariant>>& data);
    // 删除行
    void removeRow(int row);

    // 更新行
    void updateRow(int row, const QMap<QString, QVariant>& rowData);

    // 查询行
    QMap<QString, QVariant> queryRow(int row) const;

    // 刷新表格
    void refresh();

    // 根据数据来源初始化表格
    void initFromData(const QList<QMap<QString, QVariant>>& data);

    // 计算某列的最大值
    QVariant getColumnMax(int column) const;

    // 计算某列的最小值
    QVariant getColumnMin(int column) const;

    // 根据指定列排序
    void sortByColumn(int column, Qt::SortOrder order = Qt::AscendingOrder);

    //jinxuesong
    void setRows(QVector<DeviceChannel*>& vecDeviceChannel);

    void updateRowValue(int row,double value);

private:
    QVector<CustomProgressWidget*> m_vecProgressWidgets;
    QVector<DeviceChannel*>* m_vecDeviceChannel;

protected:
    // 重写右键点击事件
    void contextMenuEvent(QContextMenuEvent *event) override;

private slots:
    // 菜单项槽函数
    void onAddData();
    void onEditData();
    void onDeleteData();
    void onExportData();

private:
    // 列信息
    struct ColumnInfo {
        QString type;          // 列类型（如 "button", "text", "progress" 等）
        QVariant defaultValue; // 默认值
        QMap<QString, QVariant> properties; // 列属性
    };

    QList<ColumnInfo> columnInfos; // 存储列信息

    // 初始化表格
    void initTable();

    // 填充一行数据
    void fillRow(int row, const QMap<QString, QVariant>& rowData);

    // 填充一行数据
    void fillRow(int row,const DeviceChannel* rowData);

    // 弹出输入对话框
    QMap<QString, QVariant> showInputDialog(const QMap<QString, QVariant>& initialData = {});
};

#endif // TwoProgressTableWidget_H
